<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        .outer{
            width:300px;
            height: 300px;
            background-color: red;
        }
        .box{
            width: 200px;
            height: 200px;
            background-color: purple;
        }
        .inner{
            width: 100px;
            height: 100px;
            background-color: green;
        }
    </style>
</head>
<body>
    <div class="outer">
        <div class="box">
            <div class="inner">

            </div>
        </div>
    </div>
    <script>
        let outer = document.querySelector('.outer')
        let box = document.querySelector('.box')
        let inner = document.querySelector('.inner')

        // 你会发现你点击inner这个div，所有的父级元素的点击事件也都会触发
        /*
            DOM的事件流存在两个阶段，一个是捕获阶段、一个是冒泡阶段。
            所谓捕获阶段，其实就是当你触发一个元素的时候，浏览器会从window开始一层一层的定位，直到找到这个元素。
            而冒泡阶段，就是浏览器捕获到这个元素之后，再一层一层的回到window的过程，我们写的回调函数一般都是在冒泡阶段执行。注意，这个过程中，所有写了回调函数的元素都会执行他们的回调函数。比如ul和li，你触发了li，那么在冒泡的过程中，li和ul的回调函数都会执行
            
            虽然默认是在冒泡阶段执行回调函数，不过我们也可以通过addEventListener这个绑定回调的方法指定在捕获阶段执行回调函数。这也算是一个小知识点，addEventListener其实是有第三个参数的，就是布尔值，默认是false，但是如果你手动赋值为true，则这个回调函数就会在捕获阶段执行。

            比如这个案例中，两个阶段就包括
            捕获阶段: window => document => body => outer => box = >inner
            冒泡阶段: inner => box => outer => body => document => window
        */
        // inner.onclick = ()=>{
        //     console.log('inner');
        // }

        // box.onclick = ()=>{
        //     console.log('box');
        // }

        // outer.onclick = ()=>{
        //     console.log('outer');
        // }

        // 其实addEventListener还有第三个参数，是个布尔值，如果是true，则回调函数会在捕获阶段执行
        inner.addEventListener('click',()=>{
            console.log('inner');
        },true)
        box.addEventListener('click',()=>{
            console.log('box');
        },true)
        outer.addEventListener('click',()=>{
            console.log('outer');
        },true)
    </script>
</body>
</html>